package com.swt.gap.dao;

import com.github.pagehelper.Page;
import com.swt.gap.model.entity.FileElementsEntities;
import com.swt.gap.model.vo.MoveRepeatFileVO;
import com.swt.gap.model.entity.File;
import com.swt.gap.model.graphmodel.ResourceCenterFileInfo;
import com.swt.gap.model.vo.FileVO;
import com.swt.gap.model.vo.resourcecenter.DataListVO;
import com.swt.gap.model.vo.resourcecenter.ResourceNumber;
import com.swt.gap.model.vo.resourcecenter.ResourceSearchResultVO;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

@Repository
public interface FileDao {
    int deleteByPrimaryKey(Integer fileId);

    int insertSelective(File record);

    File selectByPrimaryKey(Integer fileId);

    int updateByPrimaryKeySelective(File record);

    //通过数据类型和搜索关键字查询数据信息
//    Page<TaskFileVO> getTaskFileVOsByTypeAndKeyword(@Param("taskId") Integer taskId, @Param("fileType")Integer fileType, @Param("keyword")String keyword);
    List<FileVO> getFile(@Param("userId") Integer userId, @Param("keyword") String keyword);


    int updateByFileClassId(File record);

    int countByFileClassAndFileType(@Param("userId") Integer userId,
                                    @Param("fileClassId") Integer fileClassId,@Param("fileType") Integer fileType);
    int countFileByFileClassId(Integer fileClassId);

    List<ResourceNumber> countResourceNumber(int userId);

    List<ResourceCenterFileInfo> getAllFile(Integer userId);

    Page<ResourceSearchResultVO> searchResource(@Param("userId") Integer userId,
                                                @Param("keyword") String keyword);

    Page<ResourceSearchResultVO> searchResourceByKeyWord(@Param("userId") Integer userId,
                                                         @Param("fileClassId") Integer fileClassId,
                                                         @Param("orderType") Integer orderType,
                                                         @Param("keyword") String keyword);

    //查找重名数据
    List<File> selectSameFile(@Param("fileName") String fileName, @Param("fileType") Integer fileType,
                        @Param("fileClassId") Integer fileClassId, @Param("createdBy") Integer createdBy);

    File selectSameFile2(@Param("originalFileName") String originalFileName,
                         @Param("fileType") Integer fileType,
                         @Param("fileClassId") Integer fileClassId,
                         @Param("createdBy") Integer createdBy,
                         @Param("fileId") Integer fileId);

    List<File> getFileByClassId(Integer fileClassId);

    int activeFile(Integer fileId);

    int deleteBatch(@Param("fileIds") List<Integer> fileIds);

    List<MoveRepeatFileVO> getRepeatFile(Map map);

    Integer lastSameNameIndex(@Param("fileClassId") int fileClassId,
                              @Param("fileNameWithoutSuffix") String fileNameWithoutSuffix,
                              @Param("suffixWithPoint") String suffixWithPoint);

    List<FileElementsEntities> getAllElements(@Param("fileId") int fileId);

    List<Integer> getContainElements(@Param("fileId") int fileId,
                                     @Param("text")String text,
                                     @Param("index")Integer index);

    FileElementsEntities getOneElements(@Param("fileId") int fileId);

    Page<DataListVO> selectByNameAndClassIdAndCreator(@Param("keyword") String keyword,
                                                      @Param("fileClassId") Integer fileClassId,
                                                      @Param("userIds") List<Integer> userIds,
                                                      @Param("hasPassword") Boolean hasPassword);


    Integer updatePassword(@Param("password") String keyword, @Param("fileIds") List<Integer> fileIds);
}